﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using BLL;

namespace GUI
{
    public partial class frmGiangVien : DevComponents.DotNetBar.Office2007Form
    {
        private DataTable _dt = new DataTable();
        private DataSet _ds = new DataSet();
        private DataSet _dsMonHoc = new DataSet();
        private BOGiangVien _teacher;
        private BOMonHoc _monHoc;
        private BOLog _log;
        public frmGiangVien()
        {
            InitializeComponent();
            descSizeHeight();
        }

        #region "Tăng kích thước form"
        public void incSizeHeight()
        {
            int y = Size.Height;
            for (int i = 0; i < 21; i++)
            {
                try
                {
                    Thread.Sleep(5);
                    Size = new Size(this.Size.Width, y + i * 8);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
            }
            CenterToScreen();
        }
        #endregion

        #region "Giảm kích thước form"
        public void descSizeHeight()
        {
            int y = this.Size.Height;
            for (int i = 0; i < 21; i++)
            {
                try
                {
                    Thread.Sleep(5);
                    Size = new Size(this.Size.Width, y - i * 8);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
            }
            CenterToScreen();
        }
        #endregion

        #region "Load form"
        private void frmGiangVien_Load(object sender, EventArgs e)
        {
            _teacher = new BOGiangVien();
            _ds = _teacher.Binding();
            _dt = _ds.Tables[0];
            dgvGiangVien.DataSource = _dt;
            dgvGiangVien.Columns[0].HeaderText = @"Tên Giảng Viên";
            dgvGiangVien.Columns[1].HeaderText = @"Số Điện Thoại";
            dgvGiangVien.Columns[2].HeaderText = @"Tên Môn Học";
            dgvGiangVien.Columns[0].Width = 150;
            dgvGiangVien.Columns[1].Width = 100;
            dgvGiangVien.Columns[2].Width = 130;

            _monHoc = new BOMonHoc();
            _dsMonHoc = _monHoc.Binding();
            cbxMonHoc.DataSource = _dsMonHoc.Tables[0];
            cbxMonHoc.DisplayMember = "TenMonHoc";
            cbxMonHoc.ValueMember = "TenMonHoc";
        }
        #endregion

        #region "Thoát form"
        private void btnThoat_Click(object sender, EventArgs e)
        {
            Dispose();
        }
        #endregion

        #region "Chức năng nút thêm mới"
        private void btnThem_Click(object sender, EventArgs e)
        {
            incSizeHeight();
            btnUpdate.Enabled = false;
        }
        #endregion

        #region "Chức năng nút hủy"
        private void btnHuy_Click(object sender, EventArgs e)
        {
            descSizeHeight();
            btnOK.Enabled = true;
            btnUpdate.Enabled = true;
            txtTenGianVien.Enabled = true;
            cbxMonHoc.Enabled = true;
        }
        #endregion

        #region "Chức năng nút OK"
        private void btnOK_Click(object sender, EventArgs e)
        {
            btnUpdate.Enabled = true;
            MessageBoxEx.EnableGlass = false;
            _teacher = new BOGiangVien();
            var name = txtTenGianVien.Text;
            var phone = txtSoDT.Text;
            _monHoc = new BOMonHoc();
            _dsMonHoc = _monHoc.LoadMaMonHoc(cbxMonHoc.SelectedValue.ToString());
            int maMonHoc = Convert.ToInt32(_dsMonHoc.Tables[0].Rows[0]["MaMonHoc"]);

            frmLyDo formLyDo = new frmLyDo();
            formLyDo.ShowDialog(this);
            string reason = formLyDo.LyDo;
            if (!reason.Equals(""))
            {
                var result = _teacher.AddGiangVien(name, phone, maMonHoc);
                MessageBoxEx.Show(result > 0
                                      ? "Thêm mới Giảng Viên thành công !!!"
                                      : "Thêm mới Giảng Viên lỗi !!!");

                _log = new BOLog();
                _log.AddLog(Session.member.TenThanhVien, " thêm mới giảng viên " + TenGiangVien, DateTime.Now, reason);
            }
            frmGiangVien_Load(sender, e);
            descSizeHeight();
            
        }
        #endregion

        #region "Mapping dữ liệu từ datagridview để Sửa"
        private void dgvGiangVien_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            string tenGiangVien = dgvGiangVien.CurrentRow.Cells[0].Value.ToString();
            string soDT = dgvGiangVien.CurrentRow.Cells[1].Value.ToString();
            string tenMonHoc = dgvGiangVien.CurrentRow.Cells[2].Value.ToString();
            txtTenGianVien.Text = tenGiangVien;
            txtSoDT.Text = soDT;
            cbxMonHoc.Text = tenMonHoc;
        }
        #endregion

        #region "Chức năng nút Sửa"
        private void btnSua_Click(object sender, EventArgs e)
        {
            incSizeHeight();
            btnOK.Enabled = false;
            btnUpdate.Enabled = true;
            txtTenGianVien.Enabled = false;
            cbxMonHoc.Enabled = false;
        }
        #endregion

        #region "Chức năng nút Update"
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            MessageBoxEx.EnableGlass = false;
            var tenGiangVien = txtTenGianVien.Text;
            var soDt = txtSoDT.Text;
            _monHoc = new BOMonHoc();
            _dsMonHoc = _monHoc.LoadMaMonHoc(cbxMonHoc.SelectedValue.ToString());
            int maMonHoc = Convert.ToInt32(_dsMonHoc.Tables[0].Rows[0]["MaMonHoc"]);
            frmLyDo formLyDo = new frmLyDo();
            formLyDo.ShowDialog(this);
            string reason = formLyDo.LyDo;
            if (!reason.Equals(""))
            {
                var result = _teacher.EditGiangVien(tenGiangVien, soDt, maMonHoc);
                MessageBoxEx.Show(result > 0
                                      ? "Sửa đổi thành công !!!"
                                      : "Sửa đổi lỗi !!!");
                _log = new BOLog();
                _log.AddLog(Session.member.TenThanhVien, " sửa số điện thoại " + tenGiangVien, DateTime.Now, reason);
            }
            descSizeHeight();
            btnOK.Enabled = true;
            frmGiangVien_Load(sender, e);
            
        }
        #endregion

        #region "Chức năng nút Xóa"
        private void btnXoa_Click(object sender, EventArgs e)
        {
            MessageBoxEx.EnableGlass = false;
            string tenGiangVien = dgvGiangVien.CurrentRow.Cells[0].Value.ToString();

            var dr = MessageBoxEx.Show("Bạn có thật sự muốn xóa?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr == DialogResult.Yes)
            {
                frmLyDo formLyDo = new frmLyDo();
                formLyDo.ShowDialog(this);
                string reason = formLyDo.LyDo;
                if (!reason.Equals(""))
                {
                    _log = new BOLog();
                    _log.AddLog(Session.member.TenThanhVien, " xóa giảng viên " + tenGiangVien, DateTime.Now,
                                reason);
                    var result = _teacher.DeleteGiangVien(tenGiangVien);
                    MessageBoxEx.Show(result > 0
                                          ? "Giảng viên đã bị xóa !!!"
                                          : "Có lỗi xảy ra, không thể xóa giảng viên !!!");
                }
            }
                
            frmGiangVien_Load(sender, e);
            
        }
        #endregion

        #region "Tìm kiếm"
        private void txtSearch_TextChanged(object sender, EventArgs e)
        {
            if (txtSearch.Text.Equals("") )
            {
                frmGiangVien_Load(sender, e);
            }
            else
            {
                if (cbxSearch.SelectedIndex == 0)
                {
                    if (txtSearch.Text.Equals(""))
                    {
                        frmGiangVien_Load(sender, e);
                    }
                    else
                    {
                        var tenGiangVien = txtSearch.Text;
                        var ds = _teacher.SearchByTenGiangVien(tenGiangVien);
                        dgvGiangVien.DataSource = ds.Tables[0];
                    }
                }
                if (cbxSearch.SelectedIndex == 1)
                {
                    if (txtSearch.Text.Equals(""))
                    {
                        frmGiangVien_Load(sender, e);
                    }
                    else
                    {
                        var tenMonHoc = txtSearch.Text;
                        var ds = _teacher.SearchByTenMonHoc(tenMonHoc);
                        dgvGiangVien.DataSource = ds.Tables[0];
                    }
                }
            }
        }
        #endregion

        private void frmGiangVien_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dr;
            MessageBoxEx.EnableGlass = false;
            dr = MessageBoxEx.Show("Bạn có thật sự muốn thoát ?", "Thông báo", MessageBoxButtons.YesNo,
                                   MessageBoxIcon.Question);
            if (dr == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
    }
}